export class Dep {
  constructor () {
    // 储存与这个依赖有关的“作用”
    // 这里使用 Set，可以利用其天然的去重属性，
    // 因为作用无需重复添加
    this._effects = new Set();
  }

  // 取消作用对此依赖的追踪
  untrack (e) {
    this._effects.delete(e);
  }

  // 作用开始追踪此依赖
  track (e) {
    this._effects.add(e);
  }

  // 触发追踪了此依赖的所有作用
  trigger () {
    for (let e of this._effects) {
      if (e.scheduler) {
        e.scheduler();
      } else {
        e.run();
      }
    }
  }
}

export const depsMap = new Map();